package cn.zane.chatgpt.data.types.exception;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * @author: zane
 * @date: 2025-09-20
 * @description: 异常处理器
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class BaseException extends RuntimeException {

    private ResultCode code;

    /**
     * 构造一个新的运行时异常，以 {@code null} 作为其
     * 详细消息。原因未初始化，随后可能是
     * 通过调用 {@link #initCause} 进行初始化。
     */
    public BaseException(ResultCode code) {
        this.code = code;
    }

    /**
     * 使用指定的详细消息构造一个新的运行时异常。
     * 原因未初始化，随后可能被初始化
     * 调用{@link #initCause}。
     *
     * @param message 详细消息。详细消息保存为
     *                稍后通过 {@link #getMessage()} 方法检索。
     */
    public BaseException(ResultCode code, String message) {
        super(message);
        this.code = code;
    }


    /**
     * 使用指定的详细消息构造一个新的运行时异常
     * 原因。 <p>请注意，与以下内容相关的详细消息
     * {@code Cause} <i>不会</i>自动并入
     * 此运行时异常的详细消息。
     *
     * @param message 详细消息（保存以供以后检索）
     *                通过 {@link #getMessage()} 方法）。
     * @param cause   原因（保存以供以后检索）
     *                {@link #getCause()} 方法）。 （{@code null} 值是
     *                允许，并表示原因不存在或
     *                未知。）
     * @since 1.4
     */
    public BaseException(ResultCode code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    /**
     * 构造一个新的运行时异常，具有指定的原因和
     * {@code (cause==null ? null : Cause.toString())} 的详细信息
     * （通常包含类和详细消息
     * {@代码原因}）。该构造函数对于运行时异常很有用
     * 只不过是其他可抛物的包装。
     *
     * @param cause 原因（保存以供以后检索）
     *              {@link #getCause()} 方法）。 （{@code null} 值是
     *              允许，并表示原因不存在或
     *              未知。）
     * @since 1.4
     */
    public BaseException(ResultCode code, Throwable cause) {
        super(cause);
        this.code = code;
    }

    /**
     * 使用指定的详细信息构造一个新的运行时异常
     * 消息、原因、抑制启用或禁用以及可写
     * 启用或禁用堆栈跟踪。
     *
     * @param message            详细消息。
     * @param cause。             （允许使用 {@code null} 值，
     *                           并表示原因不存在或未知。）
     * @param enableSuppression  是否启用抑制
     *                           或已禁用
     * @param writableStackTrace 堆栈跟踪是否应该
     *                           可写
     * @since 1.7
     */
    public BaseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, ResultCode code) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.code = code;
    }


}
